﻿// See https://aka.ms/new-console-template for more information
/// <summary>
/// 客户端代码 - 演示访问者模式的使用
/// 展示如何通过不同的访问者导出文档内容为不同格式
/// </summary>
Console.WriteLine("Hello, World!");

/// <summary>
/// 创建文档对象并添加文档元素
/// 构建包含文本和图片的复合文档结构
/// </summary>
var doc = new Document();
doc.Add(new TextSegment("Hello, world!"));
doc.Add(new ImageSegment("photo.jpg"));
doc.Add(new TextSegment("This is an image."));

/// <summary>
/// 使用HTML导出访问者将文档导出为HTML格式
/// 通过Accept方法实现访问者模式的双重分派机制
/// </summary>
// 导出为 HTML
var htmlVisitor = new HtmlExportVisitor();
doc.Accept(htmlVisitor);
Console.WriteLine("HTML 输出：");
Console.WriteLine(htmlVisitor.Output);

/// <summary>
/// 使用纯文本导出访问者将文档导出为纯文本格式
/// 展示了访问者模式如何在不修改元素类的情况下扩展新功能
/// </summary>
// 导出为纯文本
var textVisitor = new PlainTextExportVisitor();
doc.Accept(textVisitor);
Console.WriteLine("纯文本输出：");
Console.WriteLine(textVisitor.Output);